package util;

import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public abstract class SearchCommands {
	
	public abstract List<String> getCommandsPatterns();
	
	/**
	 * Busca comandos en el texto que se le pasa como argumento.
	 * Los camandos a buscar se obtienen del método getCommandsPatterns() 
	 * @param text: texto para buscar comandos.
	 * @return listado de comandos encontrados.
	 */
	public List<String> findCommandsInText(String text) {
		List<String> result = new ArrayList<String>();
		List<String> commandsPatterns = getCommandsPatterns();
		for (String commandPattern : commandsPatterns) {
			List<String> commandsFound = findCommandsInTextByCommandPattern(text, commandPattern);
			result.addAll(commandsFound);
		}
		return result;
	}
	
	/*
	 * Busca comandos en un texto según el patrón.
	 */
	private List<String> findCommandsInTextByCommandPattern(String text, String commandPattern) {
		List<String> result = new ArrayList<String>();
		Pattern pattern = Pattern.compile(commandPattern);
		Matcher matcher = pattern.matcher(text);
		boolean b = false;
		while(b = matcher.find()) {
		  result.add(matcher.group());
		}
		return result;
	}
}
